package com.example.demo.web.config;

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 类功能描述：<br>
 * Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线，保证数据能按照指定的方式进行传输,
 * Exchange：消息交换机,它指定消息按什么规则,路由到哪个队列。
 * Queue:消息的载体,每个消息都会被投到一个或多个队列。
 * Binding:绑定，它的作用就是把exchange和queue按照路由规则绑定起来.
 * Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
 * vhost:虚拟主机,一个broker里可以有多个vhost，用作不同用户的权限分离。
 * Producer:消息生产者,就是投递消息的程序.
 * Consumer:消息消费者,就是接受消息的程序.
 * Channel:消息通道,在客户端的每个连接里,可建立多个channel.
 * <ul>
 * <li>类功能描述1<br>
 * <li>类功能描述2<br>
 * <li>类功能描述3<br>
 * </ul>
 * 修改记录：<br>
 * <ul>
 * <li>修改记录描述1<br>
 * <li>修改记录描述2<br>
 * <li>修改记录描述3<br>
 * </ul>
 */

@Configuration
public class RabbitConfig {
	//队列名
    public static final String TOPIC_QUEUE_CLOUD = "tp.cloud";
    public static final String TOPIC_QUEUE_HBEAT = "tp.hbeat";
    public static final String TLOCK_EXCHANGE = "TlockExchange";
    
    
    //创建队列
    @Bean
    public Queue cloudQueue() {
        return new Queue(RabbitConfig.TOPIC_QUEUE_CLOUD);
    }
 
    @Bean
    public Queue hbeatQueue() {
        return new Queue(RabbitConfig.TOPIC_QUEUE_HBEAT);
    }
 
    @Bean
    TopicExchange exchange() {
        return new TopicExchange(RabbitConfig.TLOCK_EXCHANGE);
    }

    @Bean
    Binding bindingExchangeMessage() {
        return BindingBuilder.bind(cloudQueue()).to(exchange()).with(RabbitConfig.TOPIC_QUEUE_CLOUD);
    }

    @Bean
    Binding bindingExchangeMessage2() {
        return BindingBuilder.bind(hbeatQueue()).to(exchange()).with(RabbitConfig.TOPIC_QUEUE_HBEAT);
    }

}
